Fivetran の Hybrid Deployment モデルが利用できるようになりました #Fivetran

Fivetran の Hybrid Deployment モデルが利用できるようになりました #Fivetran

Clock Icon2024.07.10

はじめに

2024年6月に Fivetran の展開モデルの一つである Hybrid Deployment model のベータ版がリリースされました。

https://fivetran.com/docs/changelog/2024/june-2024#hybriddeployment

これによりクラウドサービスとしての Fivetran の機能を活用しつつ組織内のネットワークにデータを保持しながらデータ処理を行うことが可能となります。こちらの機能を試してみましたので記事としました。

Hybrid Deployment の概要

Fivetran のアーキテクチャ

前提として Fivetran の主な提供形態は SaaS ですが、展開モデルとして以下をサポートしています。

  • SaaS Deployment
    • データ処理を Fivetran 管理のクラウド内で実施
  • Hybrid Deployment
    • 執筆時点でベータ版
    • Fivetran とアウトバウンド通信を行う Local Processing Agent を自身が管理するネットワーク内に構築する
  • Self-Hosted Deployment
    • セルフホスト型のモデル
    • Fivetran HVR ソリューションを使用。HVR の構成要素である Hub System をオンプレミスを含む顧客管理のネットワークに構築することで、独自のサーバーで Fivetran が提供する機能を実行するため、データを外部ネットワークに移動せずに済む
    • 最もセキュリティ要件が厳しい場合に候補となる

本記事では Hybrid Deployment について扱います。

https://fivetran.com/docs/core-concepts/architecture

Hybrid Deployment

Hybrid Deployment の概要は以下に記載があります。

https://fivetran.com/docs/core-concepts/architecture/hybrid-deployment

本モデルの特徴は以下です。

  • 前提条件
  • データ処理のロケーション
    • 顧客管理のネットワークに Local Processing Agent をインストールしデータ処理を行うためデータが顧客管理のネットワークに保持される
  • Local Processing Agent
    • Docker または Podman を搭載した Linux マシンにエージェント構成ファイルをダウンロードすることで構成
    • Fivetran のマネージド SaaS に接続し、mTLS による継続的な送信接続を維持する
      • Fivetran はローカル環境(顧客ネットワーク)に接続しないため、ポートを開く必要がない
    • 各 Local Processing Agent は最大 10 個のコネクタをサポートできる
    • 各 Local Processing Agent から複数の Destination を指定できる
  • ダッシュボードの利用
    • データ処理自体は Local Processing Agent で実施されますが、その設定や同期スケジュールの管理等は SaaS 版と同じダッシュボード上で管理されます

公式ドキュメントからの引用ですが、下図のような構成です。

Untitled

詳細は上記のドキュメンと以下の FAQ をご覧ください。

https://fivetran.com/docs/core-concepts/architecture/hybrid-deployment/faq

サポートするコネクタと Destination

以下に記載があります。すべてのコネクタや Destination で使用できるわけではないためご注意ください。

https://fivetran.com/docs/core-concepts/architecture/hybrid-deployment#supportedconnectorsanddestinations

各コネクタや Destination が Hybrid Deployment モデルをサポートするかは、Hybrid Deployment アイコンの有無で識別できます。

Untitled 1

Hybrid Deployment のセットアップ

ハイブリッド展開モデルではコンテナ管理ツールを使用します。ここでは Docker を前提に進めます。

要件

  • CPU: x86-64 プロセッサを搭載した最低 4 個の vCPU
  • メモリ:最低 10 GB の RAM
  • ストレージ
    • Dockerストレージ(デフォルト:/var/lib/docker)に最低 50 GB のディスク領域
      • Destination が PostgreSQL の場合:Docker ストレージのサイズは、コネクタあたりのデータ量と同じにすることが推奨されています
      • Destination が Snowflake の場合:Docker ストレージのサイズは、コネクタあたりのデータ量の少なくとも30%とすることが推奨されています
    • 永続的なローカルストレージ(通常は$HOME/fivetran/data )に最低 50 GB のディスク領域
      • Destination が PostgreSQL の場合:永続的なローカルストレージのサイズは、コネクタあたりのデータ量と同じにすることが推奨されています
      • Destination が Snowflake の場合:永続的なローカルストレージのサイズは、コネクタあたりのデータ量の少なくとも30%とすることが推奨されています
  • OS
    • Docker Engine を使用して Docker コンテナを実行できる Linux ディストリビューション
      • Ubuntu, CentOS, Rocky Linux, SUSE Linux, Oracle Linux, Red Hat Enterprise Linux など
  • Docker Engine:v20.10.17 以上、最新の使用が推奨されています
  • Docker Compose:v2.17.x 以上

Prerequisites | Hybrid Deployment with Docker

検証環境

ここでは以下の環境を使用しました。

  • データソース
    • Amazon RDS PostgreSQL:16.3-R2
    • プライベートサブネットに構築
  • Destination:Snowflake
  • Local Processing Agent サーバー
    • OS:Amazon Linux 2023
    • インスタンスタイプ:t2.xlarge(4 vCPU, RAM 16 GB)
    • ストレージ
      • ルートボリューム:8 GB
      • Dockerストレージ:50 GB
      • 永続的なローカルストレージ:50 GB
    • パブリックサブネットに構築

上述の通り Local Processing Agent サーバーはアウトバウンド通信のみを行うためセキュリティグループは以下の設定としています。

  • Local Processing Agent サーバー
ポート範囲 タイプ ソース
22 SSH MYIP
  • Amazon RDS PostgreSQL
ポート範囲 タイプ ソース
5432 PostgreSQL Local Processing Agent サーバーのセキュリティグループ

Local Processing Agent サーバーでの作業

ユーザー追加

エージェントをホストするマシン(EC2)にログインし、ユーザーグループを追加します。

sudo groupadd fivetran-agent
sudo useradd -g fivetran-agent -m fivetran-user

上記のユーザーで SSH 接続できるようにした後、ここでは sudo 操作を行えるようにしました。
fivetran-user でログイン後、以降の操作を行います。

ディレクトリの作成

エージェントサーバーの構成に必要な以下のディレクトリを作成します。

  • Base folder:$HOME/<base_folder_name>
  • Logs folder:$HOME/<base_folder_name>/logs
  • Temporary files folder:$HOME/<base_folder_name>/data

以下のコマンドを使用しました。

mkdir -p $HOME/fivetran
mkdir -p $HOME/fivetran/logs
mkdir -p $HOME/fivetran/data

追加ボリュームのマウント

エージェント用の Docker ストレージ、永続的なローカルストレージ用に追加のボリュームをマウントします。手順は以下を参照しながら進めました。

https://dev.classmethod.jp/articles/amazon-linux-2-ebs-mount/

ファイルシステムを作成

sudo mkfs -t xfs /dev/xvdb
sudo mkfs -t xfs /dev/xvdc

ボリュームのマウントポイントの作成とマウント

# Dockerストレージ用
sudo mkdir -p /var/lib/docker
sudo mount /dev/xvdb /var/lib/docker

# fivetranデータ用
sudo mount /dev/xvdc $HOME/fivetran/data

再起動後も永続的にボリュームがマウントされるように/etc/fstabファイルを編集します。
以下のコマンドで/etc/fstabに書き込むための UUID を確認します。

$ sudo blkid
/dev/xvdc: UUID="0b982e14-b75e-4e2c-b739-095f685b7d49" BLOCK_SIZE="512" TYPE="xfs"
/dev/xvda128: SEC_TYPE="msdos" UUID="BE57-6C57" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="6b694ec3-d67c-4c3b-9664-a83d1eefbd79"
/dev/xvda127: PARTLABEL="BIOS Boot Partition" PARTUUID="9f7b6a52-1021-4b79-a729-a233bf73c6fd"
/dev/xvda1: LABEL="/" UUID="36d29e5b-3776-49ee-a4d6-5868c3a57848" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux" PARTUUID="21e74c4d-5838-4063-9c14-b0a33c40672f"
/dev/xvdb: UUID="76be3145-941d-4ac6-8881-f63694d0bf66" BLOCK_SIZE="512" TYPE="xfs"

/etc/fstabを開いて追加ボリュームの情報を追記

sudo vi /etc/fstab

以下の内容で追記しました。

UUID=76be3145-941d-4ac6-8881-f63694d0bf66  /var/lib/docker  xfs  defaults,nofail  0  2
UUID=0b982e14-b75e-4e2c-b739-095f685b7d49  /home/fivetran-user/fivetran/data  xfs  defaults,nofail  0  2

マウントの確認

$ lsblk
NAME      MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
xvda      202:0    0   8G  0 disk 
├─xvda1   202:1    0   8G  0 part /
├─xvda127 259:0    0   1M  0 part 
└─xvda128 259:1    0  10M  0 part /boot/efi
xvdb      202:16   0  50G  0 disk /var/lib/docker
xvdc      202:32   0  50G  0 disk /home/fivetran-user/fivetran/data
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs           7.9G     0  7.9G   0% /dev/shm
tmpfs           3.2G  468K  3.2G   1% /run
/dev/xvda1      8.0G  1.6G  6.5G  20% /
tmpfs           7.9G     0  7.9G   0% /tmp
/dev/xvda128     10M  1.3M  8.7M  13% /boot/efi
tmpfs           1.6G     0  1.6G   0% /run/user/1000
/dev/xvdb        50G  389M   50G   1% /var/lib/docker
/dev/xvdc        50G  389M   50G   1% /home/ec2-user/fivetran/data

インスタンスの再起動後も確認し問題なければ以降の手順に進みます。

Docker と Docker Compose のインストール

以下の手順で Docker と Docker Compose をインストールしました。

sudo dnf update
# dockerのインストール
sudo dnf install -y docker
# dockerの開始
sudo systemctl start docker
# システムの起動時に Docker も自動的に起動するように設定
sudo systemctl enable docker
# sudoなしでdockerを実行できるようにする
sudo usermod -aG docker $USER
# dockerのソケットファイルの所有グループをdockerに変更
sudo chgrp docker /var/run/docker.sock
# dockerデーモンを再起動
sudo service docker restart
# docker compose をインストール
sudo curl -L "https://github.com/docker/compose/releases/download/v2.28.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Docker Compose のインストール | Docker docs

バージョン確認

$ docker -v
Docker version 25.0.3, build 4debf41
$ docker-compose -v
Docker Compose version v2.28.1
$ sudo docker info | grep 'Docker Root Dir'
 Docker Root Dir: /var/lib/docker

Destination の作成

S3 バケットの用意

Hybrid Deployment で宛先として Snowflake を使用する場合は、S3 等の外部ステージをユーザー側で用意する必要があります。

https://fivetran.com/docs/destinations/snowflake/setup-guide#configureexternalstorageforhybriddeployment

ここではストレージサービスとして Amazon S3 を使用します。S3 へのアクセスは、現時点では IAM アクセスキーによる方法がサポートされています。そのため以下の IAM ポリシー作成し、専用の IAM ユーザーにポリシーを直接アタッチします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "s3:DeleteObjectTagging",
            "s3:ReplicateObject",
            "s3:PutObject",
            "s3:GetObjectAcl",
            "s3:GetObject",
            "s3:DeleteObjectVersion",
            "s3:ListBucket",
            "s3:PutObjectTagging",
            "s3:DeleteObject",
            "s3:PutObjectAcl"
        ],
        "Resource": [
            "arn:aws:s3:::{your-bucket-name}/*",
            "arn:aws:s3:::{your-bucket-name}"
        ]
        }
    ]
}

ユーザーを作成したら、アクセスキーを発行し安全な場所に保管しておきます。

Destination の設定

Destination の設定は Fivetran のダッシュボードから行います。Destination として Snowflake を指定します。
設定項目に以下が追加されているのでトグルをオンにします。

Untitled 2

トグルをONにすると下図のようになります。

Untitled 3

すでに Local Processing Agent サーバーを構築し登録している場合は、ここから任意の Agent を選択することができます。

ここでは新規のエージェントを登録します。[+ Configure new local processing agent] をクリックすると規約への同意を求められるので、問題なければチェックを入れ [Next] をクリックします。

Untitled 4

設定ファイル(config.json)と yml ファイル(docker-compose.yml)をダウンロードできるのでダウンロードし次に進みます。

Untitled 5

エージェントの名前を入力します。

Untitled 6

認証ファイルが生成されるのでダウンロードし、次に進みます。

Untitled 7

下図の表示になるのでエージェントサーバーにログインし操作を行います。

Untitled 8

ダウンロードした各種ファイルをサーバー側に転送します。専用のユーザー(ここではfivetran-user)でログインし各ファイルを Base folder($HOME/<base_folder_name>)に配置します。

config.json のパスを変更

ファイルを配置したらconfig.json を開きhost_persistent_storage_mount_path の値を上述の手順で作成した Temporary files folder($HOME/<base_folder_name>/data)に置き換えます。

config.json
{
	"host_docker_sock_file_path":"unix:///var/run/docker.sock",
	"host_persistent_storage_mount_path":"~/fivetran/data",
	"host_selinux_enabled":false
}

auth.json から Controller ID を確認

次にauth.json を開きcontroller_id の値を控えておきます。

auth.json
{
	"account_id":"<account_id>",
	"controller_id":"<controller id>",
	"display_name":"snowflake-test-agent",
	"master_token":"",
	"client_private_key":"-----BEGIN RSA PRIVATE KEY-----XXXX----END CERTIFICATE-----\n"
}

docker-compose.yml の編集

さいごにdocker-compose.yml を開きldp_controller_id の値をcontroller_id で置き換えます。

docker-compose.ymlの一部
services:
  controller:
    container_name: controller
    image: us-docker.pkg.dev/prod-eng-fivetran-ldp/public-docker-us/ldp-agent:production
    pull_policy: always
    restart: "no"
    labels:
      fivetran: ldp
      ldp_process_id: default-controller-process-id
      ldp_controller_id: <controller-id>

エージェントの開始

Docker Compose コマンドを実行します。

docker-compose -f docker-compose.yml up -d

エージェントを開始したら下図にチェックを入れこの設定を完了します。

Untitled 8

ストレージの設定

Snowflake を Destination とし Hybrid Deployment オプションを選択するとストレージの設定項目が追加表示されるので、下図の項目を入力し接続テストを行います。

Untitled 9

その他の項目は通常の方法と変わりありません。

コネクタの作成

事前準備

ここではデータソースとして Amazon RDS PostgreSQL を使用します。事前に以下のコマンドでサンプルデータと Fivetran で使用する読み取り専用ユーザーを作成しておきます。

--データベースの作成
CREATE DATABASE sampledb;
--テーブル作成
\c sampledb;
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);
--レコードの追加
INSERT INTO users (id, name, email) VALUES (1,'John Doe', 'john.doe@example.com');
INSERT INTO users (id, name, email) VALUES (2,'Jane Smith', 'jane.smith@example.com');
INSERT INTO users (id, name, email) VALUES (3,'Mike Brown', 'mike.brown@example.com');

--Fivetran 用の読み取り専用ユーザーを作成
CREATE USER fivetran_user WITH PASSWORD '<パスワード>';
--権限を付与
GRANT pg_read_all_data TO fivetran_user;

コネクタの設定

コネクタの作成から対象のコネクタを選択します。

Untitled 10

注意点として、Hybrid Deployment モデルを使用する Destination を使用する場合、コネクタ側も Hybrid Deployment モデルに対応するコネクタしか使用できません。

Untitled 11

※Hybrid Deployment 未対応のコネクタを指定した際の Destination の選択画面

コネクタ側にも Hybrid Deployment に関する設定項目が追加されているので作成済みのエージェントを指定します。

Untitled 12

その他の設定は通常と変わりません。

https://fivetran.com/docs/connectors/databases/postgresql/rds-setup-guide#grantuserreadonlyaccess

同期されたデータの確認

設定完了後、初期同期を行います。

Untitled 13

同期後、Snowflake 側でテーブルの追加を確認できます。

Untitled 14

レコードの追加・削除

データソース側でレコード変更し再度同期を行います。

--レコードの追加
INSERT INTO users (id, name, email) VALUES (4, 'Jane Smith', 'jane.smith@example.com');
--レコードの削除
DELETE FROM users WHERE id IN (2);

同期後 Snowflake 側に変更が反映していることを確認できました。

Untitled 15

エージェントの確認

Destinationの設定後「Account Settings > General > Local Processing Agent」より確認可能です。

Untitled 16

さいごに

ベータ版となった Fivetran の Hybrid Deploymnet モデルを試してみました。
データを自身の管理するネットワークに保持できる点や Local Processing Agent はアウトバウンド通信のみを行うためデータ処理用に Fivetran SaaS 用に追加のポートを開く必要がない点はセキュリティを重視する組織では嬉しい点かと思います。
こちらの内容が何かの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.